package business;

import repositorios.InterfaceRepositorioVenda;
import repositorios.RepositorioVendasArquivo;
import repositorios.RepositorioVendasArray;
import repositorios.RepositorioVendasLista;
import dados.Venda;
import exceptions.ObjetoInvalidoException;
import exceptions.VendaNaoCadastradaException;

public class CadastroVendas implements InterfaceCadastroVenda {

	private InterfaceRepositorioVenda repVendasLista;
	private InterfaceRepositorioVenda repVendasArray;
	private InterfaceRepositorioVenda repVendasArquivo;

	private int rep;

	public CadastroVendas(int rep) {
		repVendasLista = new RepositorioVendasLista();
		repVendasArray = new RepositorioVendasArray();
		repVendasArquivo = new RepositorioVendasArquivo();
		this.rep = rep;
	}

	@Override
	public void inserir(Venda v) throws ObjetoInvalidoException {
		if (v == null) {
			throw new ObjetoInvalidoException("Codigo invalido.");
		}
		if (v.getCodigoVenda() < 0) {
			throw new ObjetoInvalidoException("Codigo invalido.");
		}
		if (v.getValorTotal() < 0) {
			throw new ObjetoInvalidoException("Valor invalido.");
		}
		if (v.getQuantidade() < 0) {
			throw new ObjetoInvalidoException("Quantidade invalida.");
		}

		switch (rep) {
		case 1:
			repVendasLista.inserir(v);
			break;
		case 2:
			repVendasArray.inserir(v);
			break;
		case 3:
			repVendasArquivo.inserir(v);
		}
	}

	@Override
	public void remover(Venda v) throws VendaNaoCadastradaException {
		switch (rep) {
		case 1:
			if (!repVendasLista.verificar(v)) {
				VendaNaoCadastradaException vnce = new VendaNaoCadastradaException();
				throw vnce;
			}
			repVendasLista.remover(v);
			break;
		case 2:
			if (!repVendasArray.verificar(v)) {
				VendaNaoCadastradaException vnce = new VendaNaoCadastradaException();
				throw vnce;
			}
			repVendasArray.remover(v);
			break;
		case 3:
			if (!repVendasArquivo.verificar(v)) {
				VendaNaoCadastradaException vnce = new VendaNaoCadastradaException();
				throw vnce;
			}
			repVendasArquivo.remover(v);
			break;
		}
	}

	@Override
	public Venda procurar(int cod) throws ObjetoInvalidoException {
		if (cod < 0) {
			throw new ObjetoInvalidoException("Codigo invalido.");
		}
		if (rep == 1) {
			return (Venda) repVendasLista.procurar(cod);
		} else if (rep == 2) {
			return (Venda) repVendasArray.procurar(cod);
		} else {
			return (Venda) repVendasArquivo.procurar(cod);
		}
	}

	@Override
	public void atualizar(Venda v) throws VendaNaoCadastradaException {
		if (rep == 1)
			if(!repVendasLista.verificar(v)){
				VendaNaoCadastradaException vnce = new VendaNaoCadastradaException();
				throw vnce;
			}
			repVendasLista.atualizar(v);
		if (rep == 2)
			if(!repVendasArray.verificar(v)){
				VendaNaoCadastradaException vnce = new VendaNaoCadastradaException();
				throw vnce;
			}
			repVendasArray.atualizar(v);
		if (rep == 3)
			if(!repVendasArquivo.verificar(v)){
				VendaNaoCadastradaException vnce = new VendaNaoCadastradaException();
				throw vnce;
			}
			repVendasArquivo.atualizar(v);
	}

}
